NAME¶
update-crypto-policies - manage the policies available to the
various cryptographic back-ends.
SYNOPSIS¶
update-crypto-policies [COMMAND]
DESCRIPTION¶
update-crypto-policies(8) is used to set the policy
applicable for the various cryptographic back-ends, such as SSL/TLS
libraries. The policy aims to control the back-end default algorithm
selections unless the application user configures them otherwise.
The available policies are described in the
crypto-policies(7) manual page.
The desired system policy is selected in
/etc/crypto-policies/config and this tool will generate the individual
policy requirements for all back-ends that support such configuration. After
this tool is called and all the affected applications are restarted, the
administrator is assured that any application that utilizes the supported
back-ends will follow the specified policy.
Note that the above assurance does apply to the extent that
applications are configured to follow the default policy (the details vary
on the back-end, see below for more information).
The generated back-end policies will be placed in
/etc/crypto-policies/back-ends. Currently the supported back-ends (and
directive scopes they respect) are:
•GnuTLS library (GnuTLS, SSL, TLS)
•OpenSSL library (OpenSSL, SSL, TLS)
•NSS library (NSS, SSL, TLS)
•OpenJDK (java-tls, SSL, TLS)
•Libkrb5 (krb5, kerberos)
•BIND (BIND, DNSSec)
•OpenSSH (OpenSSH, SSH)
•Libreswan (libreswan, IKE, IPSec)
•libssh (libssh, SSH)
Applications and languages which rely on any of these back-ends
will follow the system policies as well. Examples are apache httpd, nginx,
php, and others.
In general after changing the system crypto policies with the
update-crypto-policies --set command it is recommended to restart the system
for the effect to fully take place as the policy configuration files are
loaded on application start-up. Otherwise applications started before the
command was run need to be restarted to load the updated configuration.
COMMANDS¶
The following commands are available in update-crypto-policies
tool.
•--set: Sets the current policy and overwrites the
config file.
•--show: Shows the currently applied crypto
policy.
•--is-applied: Returns success if the currently
configured policy in the config file was applied by running the
update-crypto-policies.
•--check: Returns success if freshly generated
configuration files match the current policy. The check will return failure if
there is a manual modification of the back-end configuration files or a newer
version of crypto-policies package is installed without running
update-crypto-policies. This should not happen with system updates because
update-crypto-policies is run implicitly there.
OPTIONS¶
The following options are available in update-crypto-policies
tool.
•--no-reload: By default this tool causes some
running applications to reload the configured policy. This option skips the
reloading.
APPLICATION SUPPORT¶
Applications in the operating system that provide a default
configuration file that includes a cryptographic policy string will be
modified gradually to support these policies.
When an application provides a configuration file, the changes
needed to utilize the system-wide policy are the following.
•Applications using OpenSSL: If an application
allows the configuration of ciphersuite string, the special cipher string
"PROFILE=SYSTEM" should replace any other cipher string.
Applications which use the default library settings automatically adhere to
the policy. Applications following the policy inherit the settings for cipher
suite preference. By default the OpenSSL library reads a configuration file
when it is initialized. If the application does not override loading of the
configuration file, the policy also sets the minimum TLS protocol version and
default cipher suite preference via this file. If the application is
long-running such as the httpd server it has to be restarted to reload the
configuration file after policy is changed. Otherwise the changed policy
cannot take effect.
•Applications using GnuTLS: Applications using
GnuTLS will load the crypto policies by default. To prevent applications from
adhering to the policy the GNUTLS_SYSTEM_PRIORITY_FILE environment variable
must be set on an empty file (e.g., /dev/null). The policy covers the settings
for cipher suite preference, TLS and DTLS protocol versions, allowed elliptic
curves, and limits for cryptographic keys.
•Applications using NSS: Applications using NSS
will load the crypto policies by default. They inherit the settings for cipher
suite preference, TLS and DTLS protocol versions, allowed elliptic curves, and
limits for cryptographic keys. To prevent applications from adhering to the
policy the NSS_IGNORE_SYSTEM_POLICY environment variable must be set to 1
prior to executing that application.
•Applications using Java: No special treatment is
required. Applications using Java will load the crypto policies by default.
These applications will then inherit the settings for allowed cipher suites,
allowed TLS and DTLS protocol versions, allowed elliptic curves, and limits
for cryptographic keys. To prevent openjdk applications from adhering to the
policy the <java.home>/jre/lib/security/java.security file should be
edited to contain security.useSystemPropertiesFile=false or the system
property java.security.disableSystemPropertiesFile be set to true. Note that
the system property java.security.properties is loaded with a lower preference
than the crypto policies, so you can’t use this property to override
crypto policies without also preventing openjdk applications from adhering to
the policy.
•Applications using libkrb5: No special treatment
is required. Applications will follow the crypto policies by default. These
applications inherit the settings for the permitted encryption types for
tickets as well as the cryptographic key limits for the PKINIT protocol. A
system-wide opt-out is available by deleting the
/etc/krb5.conf.d/crypto-policies link.
•BIND: This application inherits the set of
disabled algorithms. To opt-out from the policy, remove the policy include
directive in the named.conf file.
•OpenSSH: Both server and client application
inherits the cipher preferences, the key exchange algorithms as well as the
GSSAPI key exchange algorithms. To opt-out from the policy for client,
override the global ssh_config with a user-specific configuration in
~/.ssh/config. See
ssh_config(5) for more information. To override some
configuration option in server, use a drop-in directory
/etc/ssh/sshd_config.d/ to create a file lexicographically preceding
05-redhat.conf which is currently including crypto policies configuration
file.
•Libreswan: Both servers and clients inherit the
ESP and IKE preferences, if they are not overridden in the connection
configuration file. Note that due to limitations of libreswan, crypto policies
is restricted to supporting IKEv2. To opt-out from the policy, comment the
line including /etc/crypto-policies/back-ends/libreswan.config from
/etc/ipsec.conf.
•Applications using libssh: Both client and server
applications using libssh will load the crypto policies by default. They
inherit the ciphers, key exchange, message authentication, and signature
algorithms preferences.
POLICY CONFIGURATION¶
One of the supported policies should be set in
/etc/crypto-policies/config and this script should be run afterwards.
In case of a parsing error no policies will be updated.
CUSTOM POLICIES¶
The custom policies can take two forms. First form is a full
custom policy file which is supported by the update-crypto-policies tool in
the same way as the policies shipped along the tool in the package.
The second form can be called a subpolicy or policy modifier. This
form modifies aspects of any base policy file by removing or adding
algorithms or protocols. The subpolicies can be appended on the
update-crypto-policies --set command line to the base policy separated by
the : character. There can be multiple subpolicies appended. The resulting
configuration is the same as if the policy and subpolicies were concatenated
together.
Let’s suppose we have a subpolicy ECDHE-ONLY that enforces
ECDHE usage for key exchange, and a subpolicy SHA1 that enables support for
several usages of SHA-1 hash function. You can set the DEFAULT policy with
ECDHE key exchange and SHA-1 hash function enabled by running the following
command:
update-crypto-policies --set DEFAULT:ECDHE-ONLY:SHA1
This command generates and applies configuration that will be a
modification of the DEFAULT policy with changes specified in the ECDHE-ONLY
and SHA1 subpolicies.
FILES¶
/etc/crypto-policies/config
The file contains the system policy to be applied when
update-crypto-policies is run without any arguments. It should contain a
string of one of the policies listed in the
crypto-policies(7) page
(e.g., DEFAULT) or any custom policy name with subpolicies separated by the :
character. The file is overwritten when update-crypto-policies --set is
executed.
/etc/crypto-policies/back-ends
Contains the generated policies in separated files, and
in a format readable by the supported back ends.
/etc/crypto-policies/local.d
Contains additional files to be appended to the generated
policy files. The files present must adhere to $app-XXX.config file naming,
where XXX is any arbitrary identifier. For example, to append a line to
GnuTLS' generated policy, create a gnutls-extra-line.config file in local.d.
This will be appended to the generated gnutls.config during
update-crypto-policies. Please note that because the mechanism just appends a
line to the back-end configuration the effect varies among the back-ends. For
some of the back-ends the override fully replaces the original policy and for
other back-ends the override might not be effective at all.
/etc/crypto-policies/state/current
The file contains the current system policy name with
eventual subpolicies as of the last execution of the update-crypto-policies
command.
/etc/crypto-policies/state/CURRENT.pol
The file contains the current system policy definition
with all the modifications from eventual subpolicies applied and is written
when the update-crypto-policies command is executed.
AUTHOR¶
Written by Nikos Mavrogiannopoulos.